document.addEventListener("click", (event) => {
  startStopParsingApplications(event);
  saveParsingSettings(event);
});

function startStopParsingApplications(event) {
  // Запускаем/останавливаем парсинг

  const element = event.target.closest('[name="start"]');
  if (!element) return;
  event.preventDefault();

  if (element.dataset.parsingStatus == "launched") {
    stopParsingApplications(element);
    stopTrackingParsingActions();
  } else if (element.dataset.parsingStatus == "stopped") {
    startParsingApplications(element);
    startTrackingParsingActions();
  }
}

function stopTrackingParsingActions() {
  // Останавливаем отслеживание действий парсинга

  clearTimeout(base.trackParsingActionId);
}

function startTrackingParsingActions() {
  // Начинаем отслеживание действий парсинга

  const intervalId = setInterval(trackingParsingActions, 5000);
  base.trackParsingActionId = intervalId;

  function trackingParsingActions() {
    // Отслеживаем действия парсинга

    const attributeForParsingActions = getAttributeForParsingActions();
    let url =
      document.location.origin +
      `/scraper/startup/?parsing_action=true&${attributeForParsingActions}`;

    base.sendAjaxRequest("GET", url).then((result) => {
      insertLatestParsingAction(result);
    });
  }

  // НИЖЕ ОПРЕДЕЛЕНИЕ ФУНКЦИЙ

  function insertLatestParsingAction(result) {
    // Вставляем последнее действие парсинга

    for (const property in result) {
      const messageId = property;
      const messageText = result[property];
      const element = base.getParsingActionHtml(messageId, messageText);
      document
        .querySelector("div.tracking-parsing-actions-content")
        .insertAdjacentElement("beforeend", element);
    }
  }

  function getAttributeForParsingActions() {
    // Получаем атрибут для соответствующего действий парсинга

    const latestParsingActions = getLatestParsingActions();

    if (latestParsingActions) {
      const messageId = latestParsingActions.dataset.actionId;
      const actionText = latestParsingActions.innerHTML;
      const attributeForParsingActions = `latest_action_id=${messageId}&latest_action_text=${actionText}`;
      return attributeForParsingActions;
    } else {
      return "latest_action=full";
    }
  }

  function getLatestParsingActions() {
    // Получаем последнее действие парсинга

    const scraperActions = document.querySelectorAll(
      "div.tracking-parsing-actions-content>div.parsing-action"
    );
    if (scraperActions) {
      return scraperActions[scraperActions.length - 1];
    }
  }
}

function stopParsingApplications(element) {
  // Останавливаем парсинг заявок

  const url = document.location.origin + "/scraper/startup/?stop_scraper=true";
  const token = document.querySelector('[name="csrfmiddlewaretoken"]').value;
  const body = { token: token };
  base.sendAjaxRequest("POST", url, body).then((result) => {});

  markButton(element);

  // НИЖЕ ОПРЕДЕЛЕНИЕ ФУНКЦИЙ
  function markButton(element) {
    // Помечаем кнопку

    element.style.background = "#e5e3e4";
    element.style.color = "#5BA199";
    element.innerHTML = "запустить";
    element.dataset.parsingStatus = "stopped";
  }
}

function startParsingApplications(element) {
  // Начинаем парсинг заявок

  const url = document.location.origin + "/scraper/startup/?start_scraper=true";
  const body = getFormDataForRequest();
  base.sendAjaxRequest("POST", url, body).then((result) => {});
  markButton(element);

  // НИЖЕ ОПРЕДЕЛЕНИЕ ФУНКЦИЙ

  function markButton(element) {
    // Помечаем кнопку

    element.style.background = "#fff0";
    element.style.color = "white";
    element.innerHTML = "остановить";
    element.dataset.parsingStatus = "launched";
  }
}

function saveParsingSettings(event) {
  // Сохраняем настройки для парсинга

  if (!event.target.closest('[name="save-settings"]')) return;
  event.preventDefault();

  const body = getFormDataForRequest();
  const url =
    document.location.origin + "/scraper/settings/?save_settings=true";

  base.sendAjaxRequest("POST", url, body).then((result) => {});
}

function getFormDataForRequest() {
  // Получаем данные формы для запроса

  const token = document.querySelector('[name="csrfmiddlewaretoken"]').value;
  const parserSettingElements = getParserSettingElements();

  const body = {
    token: token,
    parserSettingElements: parserSettingElements,
  };

  return body;

  // НИЖЕ ОПРЕДЕЛЕНИЕ ФУНКЦИЙ

  function getParserSettingElements() {
    // Получаем элементы формы

    const parserSettingsElement = document.querySelector(
      "#parsing-settings-form"
    );
    const parserSettingsForm = new FormData(parserSettingsElement);
    const parserSettingElements = Array.from(parserSettingsForm);
    return parserSettingElements;
  }
}
